package com.common.demo.util;

import com.common.demo.entity.User;

/**
 * 用户上下文持有者，基于 ThreadLocal             filter过滤完将信息存入threadlocal中，
 * 用于在同一个请求线程中传递用户信息
 */
public class UserContextHolder {

    private static final ThreadLocal<User> contextHolder = new ThreadLocal<>();

   /* *
     * 设置用户信息到 ThreadLocal
     */
    public static void setUser(User loginUser) {
        contextHolder.set(loginUser);
    }

    /**
     * 获取当前线程的用户信息
     */
    public static User getUser() {
        return contextHolder.get();
    }

   /* *
     * 获取当前用户名
     */
    public static String getUsername() {
        User user = contextHolder.get();
        return user != null ? user.getUsername() : null;
    }

   /* *
     * 获取当前用户ID
     */
    public static Long getUserId() {
        User user = contextHolder.get();
        return user != null ? user.getId() : null;
    }

    /**
     * 判断是否已登录
     */
    public static boolean isLogged() {
        return contextHolder.get() != null;
    }

   /* *
     * 清除用户信息（防止内存泄漏）
     */
    public static void clear() {
        contextHolder.remove();
    }
}